package com.example.day02;
//循环语句练习
public class Execuse {
    public static void main(String[] args) {
        //    multiplication();

        int n=0b101;
        //判断一个数是否是偶数
        if((n&1)==0){
            System.out.println("偶");
        }else {
            System.out.println("奇");
        }
        System.out.println(reversenum(1100));
        System.out.println(orderReverse(12345));
        System.out.println(commonDivisor(12,18));
        System.out.println(commonmultip(12,20));
        combination();
        System.out.println(toBinary(15));

        System.out.println(toBinaryMethod(15));

        System.out.println(recursionCommonDivisor(20,25));
    }

    ///打印9*9乘法表
    public  static  void  multiplication(){
        for(int i=1,j=1;i<=9;j++){
            System.out.printf("%d*%d=%d\t",i,j,i*j);
            if(i==j){
                System.out.println();
                i++;
                j=0;
            }

        }
    }

    //传入一个数字，返回数字是几位数
    public  static  int  reversenum(int n){
        int count=0;
        while (n!=0){
            n=n/10;
            count++;
        }
        return  count;
    }

    //将一个数字逆序输出
    public  static  int orderReverse(int n){


        int result=0;
        while (true){
            int x=n%10;
            int y=n/10;
            result=result*10+x;
            if(y==0){
                break;
            }
            n=y;
        }
        return  result;


    }

    /**
     * 求两个数的最大公约数
     * 20%12=8
     * 12%8=4
     * 8%4=0
     */

    public  static  int commonDivisor(int m,int n){
        while (true){
            int x=m%n;

            if(x==0){
                break;
            }
            m=n;
            n=x;

        }
        return  n;
    }
    /**
     * 递归求两个数的最大公约数
     */
    public  static  int recursionCommonDivisor(int m ,int n){
        if(m%n==0){
            return n;
        }

      return recursionCommonDivisor(n,m%n);

    }



    /**
     * 求两个数的最小公倍数
     *  m*n/最大公约数
     */
    public  static  int commonmultip(int n,int m){
        return m*n/commonDivisor(m,n);
    }
    //有一个三位数，由数字1,2,3，4 组成。但是不能出现重复的数字，打印所有组合，并且每6个换一行
    public static  void  combination(){
        int count=0;
        for (int i = 1; i <= 4; i++) {
            for (int j = 1; j <=4; j++) {
                for (int k = 1; k <= 4; k++) {

                    if(i!=j && i!=k && j!=k){
                        System.out.print(i+""+j+k+"\t");
                        count++;
                        if(count==6){
                            System.out.println();
                            count=0;
                        }
                    }
                }
            }

        }
    }


    //输入一个正整数，返回这个正整数的二进制。比如输入数字10，返回1010
    public  static  String toBinary(int n){
        String str="";
        while (true){

            int x=n%2;
            int y=n/2;
            str=x+str;
            if(y==0){
                 break;
            }

            n=y;

        }
        return  str;

    }

    public  static  long  toBinaryMethod(int n ){
        long result=0l;
        int count=0;
        while (true){
            int x=n%2;
            int y=n/2;

            result= (long) (x*Math.pow(10,count)+result);
            count++;

            if(n==0){
                break;
            }
            n=y;
        }

        return  result;
    }
}
